package eteam.aps.mapper;

import eteam.aps.model.entity.ProductNumber;
import eteam.aps.model.vo.product_number.ProductNumberOrderVo;
import eteam.aps.model.vo.product_number.ProductNumberPMVo;
import eteam.aps.model.vo.product_number.ProductNumberVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 产品序号明细;产品序号 持久层
 *
 * @author LiuLei
 */
@Mapper
public interface ProductNumberMapper {

    /**
     * 根据 modId 查询 序号集
     *
     * @param map 查询条件
     * @return 产品序号结果集
     */
    List<ProductNumberVo> selPnListByMoId(Map<String, Object> map);

    /**
     * 根据 任务令 查询 产品序号
     *
     * @param mocLis
     * @return
     */
    List<ProductNumberPMVo> selPnPmByMocLis(List<String> mocLis);

    /**
     * 批量 保存 产品序号
     *
     * @param list 产品序号集
     * @return 修改的条数
     */
    int savePn(List<ProductNumber> list);


    /**
     * 批量删除 产品序号
     *
     * @param list 产品序号集合
     * @return 删除的条数
     */
    int batchDel(@Param("stat") Integer state, @Param("list") List<String> list);

    /**
     * 修改产品生产状态
     *
     * @param map 修改条件
     * @return 修改的条数
     */
    int updateProTypeByBarCode(Map<String, Object> map);

    /**
     * 修改草稿产品为生产中
     *
     * @param map 修改条件
     * @return 修改的条数
     */
    int updateProTypeByBarCodeWithDraft(Map<String, Object> map);

    /**
     * 修改产品生产状态
     *
     * @param list 修改参数
     * @return 修改的条数
     */
    int batchUpdateProTypeByBarCode(List<Map<String, Object>> list);

    /**
     * 修改产品生产状态
     *
     * @param list 修改参数
     * @return 修改的条数
     */
    int batchUpdatePro(List<Map<String, Object>> list);

    /**
     * 修改产品序号信息
     *
     * @param map 修改参数
     * @return 修改的条数
     */
    int updateProductNumber(Map<String, Object> map);

    /**
     * 根据条码查询 是否存在
     *
     * @param bar    条码
     * @param fState 状态
     * @return 增加
     */
    int selPnOneByBarCode(@Param("bar") String bar, @Param("fState") int fState);

    /**
     * 修改报工状态
     *
     * @param map 修改条件
     * @return 修改的条数
     */
    int updateProByBarCode(Map<String, Object> map);

    /**
     * 修改包装扫描状态
     *
     * @param upt 修改条件
     * @return 修改的条数
     */
    int updatePackType(Map<String, Object> upt);

    /**
     * @param scan 任务令
     * @param type 状态
     * @return 统计数
     */
    int[] selMocSummary(@Param("scan") String scan, @Param("type") int type);

    /**
     * @param scan  条码
     * @param state 状态
     * @return 任务令
     */
    String selMocByBarCode(@Param("scan") String scan, @Param("state") int state);

    /**
     * 更具物料查询产品库存信息
     *
     * @param map 查询条件
     * @return 产品库存
     */
    List<ProductNumberOrderVo> selectSaleBar(Map<String, Object> map);

    /**
     * 根据前缀后缀和位置获取所有的已生成的序号
     *
     * @param map 查询条件
     * @return
     */
    String getMaxSeqNo(Map<String, Object> map);

    /**
     * @param list 产品条码集
     * @return 查询到的数量
     */
    int selectCountByBarCode(Collection<String> list);

    /**
     * @param state   状态
     * @param mocCode 制令号
     * @return 查询到的数量
     */
    int selectCountByMocCode(@Param("state") Integer state, @Param("mocCode") String mocCode);
}
